﻿using EGuayas.Web.Expedientes;
using EGuayas.Web.Resources;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EGuayas.Web.Licenciamiento.admin.tabs
{
    public partial class pgTipoExPostExtPost : pgBase
    {
        protected string codFaseInicial
        {
            get
            {
                if (Session[SessionPage.PageLicAdm + "_codFaseInicial"] == null)
                {
                    Session[SessionPage.PageLicAdm + "_codFaseInicial"] = "";
                }
                return (Session[SessionPage.PageLicAdm + "_codFaseInicial"].ToString());
            }
            set
            {
                Session[SessionPage.PageLicAdm + "_codFaseInicial"] = value;
            }
        }
        protected String EstadoFase
        {
            get
            {

                return SessionPage.PageLicAdm + "_estadoFase" + codFaseInicial;
            }

        }
        protected String FaseLicId
        {
            get
            {

                return SessionPage.PageLicAdm + codFaseInicial;
            }

        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {
                    //Para listar los estado por codigo de fase
                    Guid idExpediente = Guid.Parse(GetSessionPage.ExpedienteId(SessionPage.PageLicAdm));
                    Expediente objExpNow = Expediente.GetEditableRoot(idExpediente);
                    codFaseInicial = ExpedienteIU.ObtenerCodigoIncial(objExpNow.Categoria);
                    /*if (objExpNow.Categoria == Constantes.FaseConfigTdr)
                    {
                        codFaseInicial = Constantes.LTDR;
                        this.cbbCateg.RemoveByValue("Cat1");
                        this.cbbCateg.RemoveByValue("Cat3");
                        this.cbbCateg.SetValueAndFireSelect("Cat2");
                    }
                    else
                    {
                        codFaseInicial = Constantes.LCategorizacion;
                    }*/
                    stoEstadosDMA.DataSource = EstadoFaseLista.GetEstadoFase(codFaseInicial);
                    stoEstadosDMA.DataBind();
                    //Mostrar popup expediente
                    int numFases = 0;                 
                    if (Request["numFases"] != null)
                    {
                        //Invoca desde ventana
                        this.forPnlCategor.SetTitle("");                       
                        int.TryParse(Request["numFases"], out numFases);
                        this.gpFases.Hide();
                    }
                    else
                    {
                        //Visualizacion desde Panel
                        this.gpFases.Show();
                        this.forPnlCategor.Icon = Icon.Wrench;                     
                        FaseLicenciamientoLista fasesCreadas = FaseLicenciamientoLista.GetFaseLicenciamientoLista(Guid.Parse(Request["idExp"]));
                        numFases=fasesCreadas.Count;
                    }
                    //Crear fases
                    if (numFases <= 1)
                    {
                        ExpedienteLicenciamiento objExpLic = ExpedienteLicenciamiento.GetEditableRoot(idExpediente);
                        cbbCateg.SetValueAndFireSelect(objExpLic.Categoria);
                        if (GetSessionPage.GetSession(EstadoFase) != Valores.Codigo_Estado_Fase_Finalizado)
                        {
                            this.btnAceptarCong.Show();
                            this.btnAceptarCong.Disable();
                        }
                        else
                        {
                            this.btnAceptarCong.Hide();
                            this.formDisabled(true);
                        }
                        this.btnModificar.Hide();
                    }
                    else
                    {
                          //Modificar fases
                          ExpedienteLicenciamiento objExpLic = ExpedienteLicenciamiento.GetEditableRoot(idExpediente);
                          var faseLic = FaseLicenciamiento.GetEditableRoot(Guid.Parse( GetSessionPage.GetSession(FaseLicId)));
                          Expediente objExp = Expediente.GetEditableRoot(idExpediente);
                          if (objExp.NumeroCategoria == 1)
                          {
                              if (objExpLic.ExpedienteId != "")
                              {
                                  //Aqui setear el codigo
                                  this.cbxClasif1.Show();
                                  this.cbxClasif2.Show();
                                  this.cbxClasif3.Show();
                                  this.txtCodigoAdd.ReadOnly = false;
                                  this.txtCodigoAdd.Width = 90;
                                  if (objExpLic.Codigo.Length != 0)
                                  {
                                      try
                                      {
                                          //GPG-13-0001-L  //1234567891023
                                          int lengthSubCodigo = 13;
                                          this.cbxClasif1.FieldLabel = "Código:  " + objExpLic.Codigo.Substring(0, lengthSubCodigo);
                                          this.cbxClasif1.SetValueAndFireSelect(objExpLic.Codigo.Substring(lengthSubCodigo, 1));
                                          this.cbxClasif2.SetValueAndFireSelect(objExpLic.Codigo.Substring(lengthSubCodigo + 1, 1));
                                          this.cbxClasif3.SetValueAndFireSelect(objExpLic.Codigo.Substring(lengthSubCodigo + 2, 2));
                                          this.txtCodigoAdd.SetValue(objExpLic.Codigo.Substring(lengthSubCodigo + 4));
                                      }
                                      catch
                                      { }
                                  }
                                  else
                                  {
                                      this.cbxClasif1.SetValueAndFireSelect("");
                                      this.cbxClasif2.SetValueAndFireSelect("");
                                      this.cbxClasif3.SetValueAndFireSelect("");

                                      this.txtCodigoAdd.SetValue("");
                                  }
                                  forPnlCatSetValues(objExpLic, faseLic);

                              }// if (objExpLic.ExpedienteId != "")
                          }
                          else
                          {
                              this.cbxClasif1.Hide();
                              this.cbxClasif2.Hide();
                              this.cbxClasif3.Hide();

                              this.cbxClasif1.AllowBlank = true;
                              this.cbxClasif2.AllowBlank = true;
                              this.cbxClasif3.AllowBlank = true;
                              this.txtCodigoAdd.Width = 290;
                              this.txtCodigoAdd.ReadOnly = true;
                              this.txtCodigoAdd.FieldLabel = "Código:  ";
                              this.txtCodigoAdd.SetValue(objExpLic.Codigo);
                              forPnlCatSetValues(objExpLic, faseLic);
                          
                          }
                          this.btnAceptarCong.Hide();
                          if (GetSessionPage.GetSession(EstadoFase) != Valores.Codigo_Estado_Fase_Finalizado)
                          {
                              this.btnModificar.Show();
                              this.btnModificar.Enable();
                              this.formDisabled(false);
                          }
                          else
                          {
                              this.formDisabled(true);
                              this.btnModificar.Hide();
                          }
                     
                    }//else
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }

        private void forPnlCatSetValues(ExpedienteLicenciamiento objExpLic, FaseLicenciamiento faseLic)
        {
            var datosFases = FaseLicenciamientoLista.GetFaseLicenciamientoLista(Guid.Parse(Request["idExp"]));
            var faseObj = datosFases.FirstOrDefault(f => f.CodigoFase == Constantes.LPoliza);
            //Setear valor de clasificacion,y asignar valor a forpanel
            X.Js.Call("pgTipoCat1Cat2.SelectClasificacion", objExpLic.Categoria);
            string rdSelect = (faseObj != null) ? "S" : "N";
            if (rdSelect == "S")
            {
                this.rdSi.Checked = true;
            }
            else
            {
                this.rdNo.Checked = true;
            }
            this.forPnlCategor.SetValues(new { Categoria = objExpLic.Categoria, Tipo = objExpLic.Tipo, EstadoDMA = faseLic.EstadoDMA });
        }

        private void formDisabled( Boolean flag)
        {
            if (flag)
            {
                this.cbxClasif1.Disable();
                this.cbxClasif2.Disable();
                this.cbxClasif3.Disable();
                this.txtCodigoAdd.Disable();
                this.cbbCateg.Disable();
                this.cbbTipo.Disable();
                this.rdgPoliz.Disable();
                this.cbxEstadoDMA.Disable();
            }
            else
            {
                this.cbxClasif1.Enable();
                this.cbxClasif2.Enable();
                this.cbxClasif3.Enable();
                this.txtCodigoAdd.Enable();
                this.cbbCateg.Enable();
                this.cbbTipo.Enable();
                this.rdgPoliz.Enable();
                this.cbxEstadoDMA.Enable();
            
            }
        }
        [DirectMethod]
        public FaseLicenciamientoLista BindDataArchivos(string action, Dictionary<string, object> extraParams)
        {
            FaseLicenciamientoLista itemsReturn = null;
            try
            {
                if (Request["numFases"] == null)
                {
                    itemsReturn = FaseLicenciamientoLista.GetFaseLicenciamientoLista(Guid.Parse(Request["idExp"]));
                }

              
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
            return itemsReturn;
        }
        protected void btnConfigUpdate_Click(object sender, DirectEventArgs e)
        {
            try
            {   Guid idExpedienteLic = Guid.Parse(GetSessionPage.ExpedienteLic(SessionPage.PageLicAdm));

                FaseLicenciamientoLista itemsSelect = FaseLicenciamientoLista.GetFaseLicenciamientoLista(Guid.Parse(Request["idExp"]));
                ActualizaEstadoDMA(e.ExtraParams["EstadoDMA"]);
                ActualizaCodigo(idExpedienteLic, e.ExtraParams["Codigo1"] + e.ExtraParams["Codigo2"] + e.ExtraParams["Codigo3"] + e.ExtraParams["Codigo4"] + e.ExtraParams["Codigo5"] + e.ExtraParams["Codigo6"], e.ExtraParams["CodigoAdd"]);

                int iCountFase = 0;
                foreach (FaseLicenciamientoInfo item in itemsSelect)
                {
                    //Valida el fases
                    if (item.CodigoFase != codFaseInicial)
                    iCountFase += FaseLicenciamiento.ValidarFase(item.Id.ToString());
                  
                }
                if (iCountFase == 0)
                {
                    foreach (FaseLicenciamientoInfo row in itemsSelect)
                    {

                        FaseLicenciamiento objFase = FaseLicenciamiento.GetEditableRoot(row.Id);

                        if (objFase.FaseId != "" && row.CodigoFase != codFaseInicial)
                        {
                            objFase.Delete();
                            objFase.Save();
                        }
                    }

                    CreateFases(idExpedienteLic, e.ExtraParams["Catg"], e.ExtraParams["Tipo"], e.ExtraParams["Poliza"], codFaseInicial);
                    if (Request["numFases"] == null)
                    {
                        this.gpFases.GetStore().Reload();
                       
                    }
                    X.Msg.Show(new MessageBoxConfig()
                    {
                        Message = "Se ha actualizado correctamente fases.",
                        Title = Titulos.TituloAviso,
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO
                    });
                }
                else
                {
                    X.Msg.Show(new MessageBoxConfig()
                    {
                        Message = "No se puede Modificar fases creadas",
                        Title = Titulos.TituloAviso,
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO
                    });
                  
                    
                }  
                this.btnModificar.Disable();
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

        }

        private void ActualizaEstadoDMA(string estado)
        {
            var faseLic = FaseLicenciamiento.GetEditableRoot(Guid.Parse(GetSessionPage.GetSession(FaseLicId)));
            faseLic.EstadoDMA =estado;
            
            faseLic.Save();
        }
        private void ActualizaCodigo(Guid idExp, string codigo, string codigoAdd)
        {
            try
            {
                int lengthSubCodigo = 13;              

                //Inicialmente expediente de licenciamiento no tiene codigo se produce error
                //El expediente tiene codigo
                var objExpLic = ExpedienteLicenciamiento.GetEditableRoot(idExp);
                var expediente = Expediente.GetEditableRoot(Guid.Parse( objExpLic.ExpedienteId));
                if (expediente.NumeroCategoria == 1)
                {
                    expediente.Codigo = expediente.Codigo.Substring(0, lengthSubCodigo) + codigo + codigoAdd;
                }
                else 
                {
                    expediente.Codigo =  codigoAdd;
                }

                objExpLic.Codigo = expediente.Codigo;
                objExpLic.Save();
                //Aqui guardar el codigo en expediente y expediente licenciamiento                
                expediente.Save();
                

            }
            catch (Exception ex)
            {
                
                RegistrarLog(ex);
            }
            
        }

        protected void btnConfig_Click(object sender, DirectEventArgs e)
        {
            try
            {
                    Guid idExpedienteLic = Guid.Parse(GetSessionPage.ExpedienteLic(SessionPage.PageLicAdm));
                    //Aqui envia a guardar el codigo en expediente y expediente licenciamiento
                    ActualizaEstadoDMA(e.ExtraParams["EstadoDMA"] );
                    ActualizaCodigo(idExpedienteLic, e.ExtraParams["Codigo1"] + e.ExtraParams["Codigo2"] + e.ExtraParams["Codigo3"] , e.ExtraParams["CodigoAdd"]);

                    CreateFases(idExpedienteLic, e.ExtraParams["Catg"], e.ExtraParams["Tipo"], e.ExtraParams["Poliza"], codFaseInicial);
                    this.btnAceptarCong.Hide();
                    this.btnModificar.Show();
                   
                    //Determino que es invocado desde una ventana
                    if (Request["numFases"] != null)
                    {
                        X.Js.Call("pgTipoCat1Cat2.closeVentana");
                    }
                    else
                    {
                        this.gpFases.GetStore().Reload();
                        X.Msg.Show(new MessageBoxConfig()
                        {
                            Message = "Se ha creado correctamente fases.",
                            Title = Titulos.TituloAviso,
                            Buttons = MessageBox.Button.OK,
                            Icon = MessageBox.Icon.INFO
                        });
                    }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

        }

        private static void CreateFases(Guid idExpediente, string configCat, string configTipo, string typePoliza,string scodFaseInicial)
        {

            FaseLicenciamientoLista datosFases = FaseLicenciamientoLista.GetFaseLicenciamientoLista();
            //Al selecionar cat 3 poliza asignar por defecto N
            if(configCat=="Cat3")
            {
                configTipo = "";
                typePoliza =Valores.Codigo_CHAR_No;
            }
            string[] myFases = ConfigurationManager.AppSettings[configCat].Split(',');
            ExpedienteLicenciamiento objExpLic = ExpedienteLicenciamiento.GetEditableRoot(idExpediente);
            if (objExpLic.ExpedienteId != "")
            {

                foreach (string fasesName in myFases)
                {
                    if (fasesName != scodFaseInicial)
                    {
                        var faseObj = datosFases.FirstOrDefault(f => f.CodigoFase == fasesName);

                        if (fasesName != Constantes.LPoliza & fasesName != scodFaseInicial)//
                        {
                            CreateFase(objExpLic.Id.ToString(), faseObj.FaseId.ToString());
                        }
                        else
                        {
                            if (fasesName == Constantes.LPoliza & typePoliza == Valores.Codigo_CHAR_Si)
                                CreateFase(objExpLic.Id.ToString(), faseObj.FaseId.ToString());

                        }
                    }
                }
                objExpLic.Tipo = configTipo;
                objExpLic.Categoria = configCat;
                objExpLic.Save();
            }
            else
            {
                throw new System.InvalidOperationException("Id de Session Expediente Licenciamiento Invalido");

            }
              
        }

        private static void CreateFase(string expLic, string faseId)
        {
            FaseLicenciamiento objFase = FaseLicenciamiento.NewEditableRoot();
            objFase.Id = System.Guid.NewGuid();
            objFase.ExpedienteLicId = expLic;
            objFase.FaseId = faseId;
            objFase.FechaInicial = DateTime.Now;
            objFase.EstadoFase = Valores.Codigo_Estado_Fase_Creado;
            objFase.Save();
        }
    }
}